package Lambda;

import org.junit.Test;

import java.util.Comparator;

/**
 * @author : <h2>冷环渊</h2>
 * @date : 2021/12/10
 * @context:<h4>Lambda 表达式 实操案例</h4>
 */
public class LambdaTest {
    /**
     * <h2>示例 1  无参数 传统语法 和 lambda 表达式的区别</h2>
     */
    @Test
    public void Test1() {
        // 传统 的 创建一个 线程 打印
        Runnable r1 = new Runnable() {

            @Override
            public void run() {
                System.out.println("我爱北京天安门");
            }
        };
        r1.run();

        System.out.println("****************************");


        // 用 lambda 表达式 的方法
        Runnable r2 = () -> System.out.println("我爱看北京天安门");
        r2.run();
    }

    /**
     * @return :  * @return : null
     * @author : <h2>冷环渊</h2>
     * @date : 2021/12/10
     * @context: <h3>有参数的 Lambda 表达式 传统和 新语法</h3>
     * @params :  null
     */
    @Test
    public void Test2() {
        //传统的语法 对象 实现对应方法
        Comparator<Integer> com1 = new Comparator<Integer>() {
            @Override
            public int compare(Integer o1, Integer o2) {
                return Integer.compare(o1, o2);
            }
        };
        int compare1 = com1.compare(12, 21);
        System.out.println(compare1);
        System.out.println("***********************");
        /*
         *  lambda表达式 有参数 语法
         *  函数式接口 使用这个接口你一定要实现且只要是先一个接口的时候就可以使用 Lambda 表达式
         *   @FunctionalInterface
         *   public interface Comparator<T> {
         *   int compare(T o1, T o2);
         *    }
         *  使用之后 就变成来很简洁的语法  他代替我们省区了很多已知的东西
         *  Comparator<Integer> com2 = (o1, o2) -> Integer.compare(o1, o2);
         * */
        Comparator<Integer> com2 = (o1, o2) -> Integer.compare(o1, o2);
        int compare2 = com2.compare(32, 21);
        System.out.println(compare2);
        System.out.println("***********************");

        //我们还可以更加的简化
        //方法引用
        Comparator<Integer> com3 = Integer::compare;
        int compare3 = com3.compare(20, 21);
        System.out.println(compare3);
        System.out.println("***********************");
    }

}
